﻿using SIIE_ERP.BaseDatos.Bancos.Catalogos;
using SIIE_ERP.BaseDatos.CapitalHumano.Catalogos;
using SIIE_ERP.BaseDatos.Configuracion;
using SIIE_ERP.BaseDatos.Configuracion.Empresa;
using SIIE_ERP.BaseDatos.CRM.Catalogos;
using SIIE_ERP.BaseDatos.Inventarios.Catalogos;
using SIIE_ERP.BaseDatos.Ventas.Catalogos;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos
{
    public static class Registro
    {   
        public static Respuesta MakeRegistro(

            string RFC,
            string Razon_Social,
            string Nombre_Contacto,
            string Puesto_Contacto,
            string Telefono_Contacto,
            string Correo_Contacto,
            string Usuario,
            int Pais,
            int Estado,
            int ComoNosConociste,
            string Password,
            string DistribuidorCode            
        ) 
        {
            try
            {
                //Almacén
                dbo_Cat_Almacen a = new dbo_Cat_Almacen(RFC, Usuario);
                a.Insert_Almacen("Almacén General");

                //Grupo de Clientes
                dbo_Cat_Grupo_Clientes b = new dbo_Cat_Grupo_Clientes(RFC, Usuario);
                b.Insert_Grupo_Clientes("Ventas al Mostrador", "Ventas al Mostrador");
                DataTable b_ds = b.Get_Grupo_Clientes_Por_Nombre("Ventas al Mostrador");                

                //Función
                dbo_Cat_Funcion c = new dbo_Cat_Funcion(RFC, Usuario);
                c.Insert_Funcion("Ventas al Mostrador", "Ventas al Mostrador");
                DataTable dt_c = c.Get_Funcion_Por_Nombre("Ventas al Mostrador");

                //Colaborador
                dbo_Cat_Colaborador d = new dbo_Cat_Colaborador(RFC, Usuario);
                d.Insert_Colaborador("1", "Ventas al Mostrador", Int32.Parse(dt_c.Rows[0]["Id_Funcion"].ToString()), false, true, 9, 1);
                DataTable d_ds = d.Get_Colaborador_Por_Nombre("Ventas al Mostrador");                

                //Terminos de Pago
                dbo_Cat_Terminos_Pago e  = new dbo_Cat_Terminos_Pago(RFC, Usuario);
                e.Insert_Terminos_Pago("Contado", 0);
                e.Insert_Terminos_Pago("30 días", 30);
                e.Insert_Terminos_Pago("45 días", 40);
                DataTable e_ds = e.Get_Terminos_Pago_Por_Nombre("Contado");                

                //Monedas
                dbo_Cat_Moneda f = new dbo_Cat_Moneda(RFC, Usuario);
                f.Insert_Moneda(1, "PES", "$", "Pesos Mexicanos");
                f.Insert_Moneda(2, "USD", "$", "Dólares Americanos");
                f.Insert_Moneda(3, "EUR", "€", "Euros");
                DataTable f_ds = f.Get_Moneda_Por_Nombre("Pesos Mexicanos");                
                DataTable f2_ds = f.Get_Moneda_Por_Nombre("Dólares Americanos");                
                DataTable f3_ds = f.Get_Moneda_Por_Nombre("Euros");                

                //Tipo de Cambio
                dbo_Cat_TipoCambio g = new dbo_Cat_TipoCambio(RFC, Usuario);
                g.Insert_TipoCambio(Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()), 1.0f);
                g.Insert_TipoCambio(Int32.Parse(f2_ds.Rows[0]["Id_Moneda"].ToString()), 1.0f);
                g.Insert_TipoCambio(Int32.Parse(f3_ds.Rows[0]["Id_Moneda"].ToString()), 1.0f);

                //Clientes
                dbo_Cat_Cliente h = new dbo_Cat_Cliente(RFC, Usuario);
                h.Insert_Cliente(
                    0,
                    "Público en General",
                    "XAXX010101000",
                    "Público en General",
                    Int32.Parse(b_ds.Rows[0]["Id_GrupoClientes"].ToString()),
                    Int32.Parse(d_ds.Rows[0]["Id_Colaborador"].ToString()),
                    Int32.Parse(e_ds.Rows[0]["Id_Terminos_Pago"].ToString()),
                    Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()),
                    0,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    true
                    );

                h.Insert_Cliente(
                    1,
                    "Clientes Extranjeros",
                    "XEXX010101000",
                    "Clientes Extranjeros",
                    Int32.Parse(b_ds.Rows[0]["Id_GrupoClientes"].ToString()),
                    Int32.Parse(d_ds.Rows[0]["Id_Colaborador"].ToString()),
                    Int32.Parse(e_ds.Rows[0]["Id_Terminos_Pago"].ToString()),
                    Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()),
                    0,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    true
                    );

                //Serie
                dbo_Cat_Empresa_Serie i = new dbo_Cat_Empresa_Serie(RFC, Usuario);
                i.Insert_Empresa_Serie("A", null, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, true, true, true, true,
                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, true, true, true, true, DateTime.Now);
                DataTable i_ds = i.Get_Empresa_Serie_Por_Nombre("A");                

                //Sucursal
                dbo_Cat_Sucursal j = new dbo_Cat_Sucursal(RFC, Usuario);
                j.Insert_Sucursal("", "Matriz", Int32.Parse(i_ds.Rows[0]["Id_Serie"].ToString()), 9, 1);

                //Línea
                dbo_Cat_Linea k = new dbo_Cat_Linea(RFC, Usuario);
                k.Insert_Linea("Sin Línea", "000");
                DataTable k_ds = k.Get_Linea_Por_Nombre("Sin Línea");

                //Color
                dbo_Cat_Color l = new dbo_Cat_Color(RFC, Usuario);
                l.Insert_Color(Int32.Parse(k_ds.Rows[0]["Id_Linea"].ToString()), "Sin Color", "000");

                //Talla
                dbo_Cat_Talla m = new dbo_Cat_Talla(RFC, Usuario);
                m.Insert_Talla(Int32.Parse(k_ds.Rows[0]["Id_Linea"].ToString()), "Sin Talla", "000");

                //Cuenta Bancaria
                dbo_Cat_Cuenta_Bancaria n = new dbo_Cat_Cuenta_Bancaria(RFC, Usuario);
                n.Insert_Cuenta_Bancaria("Caja Chica", "Caja Chica", Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()));

                //Tipos de Actividad
                dbo_Cat_Tipo_Actividad o = new dbo_Cat_Tipo_Actividad(RFC, Usuario);
                o.Insert_Tipo_Actividad("Llamada");
                o.Insert_Tipo_Actividad("Cita");
                o.Insert_Tipo_Actividad("Envío de Mail");

                //Métodos de Pago
                dbo_Cat_Metodo_Pago p = new dbo_Cat_Metodo_Pago(RFC, Usuario);
                p.Insert_Metodo_Pago("Efectivo");
                p.Insert_Metodo_Pago("No Identificado");
                p.Insert_Metodo_Pago("Cheque Nominativo");
                p.Insert_Metodo_Pago("Tranferencia Electrónica");
                p.Insert_Metodo_Pago("Tarjeta de Debito, de Credito, de Servicios y/o Monedero Electronico");

                //Formas de Pago
                dbo_Cat_Forma_Pago q = new dbo_Cat_Forma_Pago(RFC, Usuario);
                q.Insert_Forma_Pago("Pago en parcialidades");
                q.Insert_Forma_Pago("Pago en una solo exhibición");

                //Unidades de Medida
                dbo_Cat_UM r = new dbo_Cat_UM(RFC, Usuario);
                r.Insert_UM("Pieza");
                r.Insert_UM("Caja");

                //Tipos de Movimiento de Inventario
                dbo_Cat_TipoMov_Inv s = new dbo_Cat_TipoMov_Inv(RFC, Usuario);
                s.Insert_TipoMov_Inv("Compras", "Entrada", "CO");
                s.Insert_TipoMov_Inv("Devoluciones a Proveedor", "Salida", "DP");
                s.Insert_TipoMov_Inv("Ventas", "Entrada", "VE");
                s.Insert_TipoMov_Inv("Devoluciones de Venta", "Entrada", "DV");
                s.Insert_TipoMov_Inv("Inventario Físico", "Entrada", "IF");
                s.Insert_TipoMov_Inv("Remisión", "Salida", "RE");
                s.Insert_TipoMov_Inv("Ticket de Venta", "Salida", "TV");

                //Tasas de Impuesto
                dbo_Cat_TasaImpuesto u = new dbo_Cat_TasaImpuesto(RFC, Usuario);
                u.Insert_TasaImpuesto("IVA Aplicable", "", 16, 0, 0);                
                u.Insert_TasaImpuesto("Arrendamiento", "", 16, 10.667, 10);
                u.Insert_TasaImpuesto("Honorarios", "", 16, 10.667, 10);
                u.Insert_TasaImpuesto("Sin Impuesto", "", 0, 0, 0);
                u.Insert_TasaImpuesto("Excento", "", 0, 0, 0);                

                //Empresa
                dbo_Cat_Empresa v = new dbo_Cat_Empresa(RFC, Usuario);
                v.Insert_Empresa(Razon_Social, Nombre_Contacto, Puesto_Contacto, Telefono_Contacto, Correo_Contacto, true);

                //Empresa Datos Factura
                dbo_Cat_Empresa_Datos_Factura w = new dbo_Cat_Empresa_Datos_Factura(RFC, Usuario);
                w.Insert_Empresa_Datos_Factura(1, null, null, null, null, null, false, false, 0);

                //Usuario
                int Dia_F = DateTime.Now.Day;
                DateTime Fecha_F = new DateTime();

                if(Dia_F > 28)
                {
                    Dia_F = 2;
                    Fecha_F = new DateTime(DateTime.Now.AddMonths(2).Year, DateTime.Now.AddMonths(2).Month, 2, 23, 59, 59);
                }
                else
                {
                    int anio = 0;
                    int mes = 0;
                    int dia = 0;

                    anio = DateTime.Now.Year;
                    mes = DateTime.Now.Month;
                    dia = DateTime.Now.Day;

                    Fecha_F = new DateTime(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, DateTime.Now.Day, 23, 59, 59);                                        
                }

                dbo_Sec_Usuario x = new dbo_Sec_Usuario(RFC, Usuario);
                x.Insert_Sec_Usuario(
                    Usuario, 
                    Password, 
                    Nombre_Contacto, 
                    Telefono_Contacto, 
                    Fecha_F, 
                    true, 
                    Correo_Contacto, 
                    Puesto_Contacto, 
                    Pais, 
                    Estado, 
                    ComoNosConociste, 
                    true
                );
                int ds_x = x.Get_Id_Usuario(Usuario);

                //Menus
                dbo_Sec_Menu y = new dbo_Sec_Menu();
                DataTable Menus = y.Get_Menus();

                for (int index = 0; index < Menus.Rows.Count; index++) {

                    dbo_Sec_MenuUser z = new dbo_Sec_MenuUser();
                    z.Insert_Sec_MenuUser(Int32.Parse( Menus.Rows[index]["IdMenu"].ToString()), RFC, ds_x, true);
                }

                dbo_Sec_Usuario_PV aa = new dbo_Sec_Usuario_PV();
                aa.Insert_Sec_Usuario_PV(ds_x, 3);

                return new Respuesta(1, "Exito");
            }
            catch (Exception)
            {
                return new Respuesta(2, "Error");
            }
        }

        public static Respuesta MakeRegistroEmpresa(

            string RFC,
            string Razon_Social,
            string Nombre_Contacto,
            string Puesto_Contacto,
            string Telefono_Contacto,
            string Correo_Contacto,
            string Usuario
        ) 
        {
            try
            {
                dbo_Sec_Usuario x = new dbo_Sec_Usuario(RFC, Usuario);                
                int ds_x = x.Get_Id_Usuario(Usuario);

                //Almacén
                dbo_Cat_Almacen a = new dbo_Cat_Almacen(RFC, Usuario);
                a.Insert_Almacen("Almacén General");

                //Grupo de Clientes
                dbo_Cat_Grupo_Clientes b = new dbo_Cat_Grupo_Clientes(RFC, Usuario);
                b.Insert_Grupo_Clientes("Ventas al Mostrador", "Ventas al Mostrador");
                DataTable b_ds = b.Get_Grupo_Clientes_Por_Nombre("Ventas al Mostrador");                

                //Función
                dbo_Cat_Funcion c = new dbo_Cat_Funcion(RFC, Usuario);
                c.Insert_Funcion("Ventas al Mostrador", "Ventas al Mostrador");
                DataTable dt_c = c.Get_Funcion_Por_Nombre("Ventas al Mostrador");

                //Colaborador
                dbo_Cat_Colaborador d = new dbo_Cat_Colaborador(RFC, Usuario);
                d.Insert_Colaborador("1", "Ventas al Mostrador", Int32.Parse(dt_c.Rows[0]["Id_Funcion"].ToString()), false, true, 9, 1);
                DataTable d_ds = d.Get_Colaborador_Por_Nombre("Ventas al Mostrador");                

                //Terminos de Pago
                dbo_Cat_Terminos_Pago e  = new dbo_Cat_Terminos_Pago(RFC, Usuario);
                e.Insert_Terminos_Pago("Contado", 0);
                e.Insert_Terminos_Pago("30 días", 30);
                e.Insert_Terminos_Pago("45 días", 40);
                DataTable e_ds = e.Get_Terminos_Pago_Por_Nombre("Contado");                

                //Monedas
                dbo_Cat_Moneda f = new dbo_Cat_Moneda(RFC, Usuario);
                f.Insert_Moneda(1, "PES", "$", "Pesos Mexicanos"); 
                f.Insert_Moneda(2, "USD", "$", "Dólares Americanos");
                f.Insert_Moneda(3, "EUR", "€", "Euros");
                DataTable f_ds = f.Get_Moneda_Por_Nombre("Pesos Mexicanos");                
                DataTable f2_ds = f.Get_Moneda_Por_Nombre("Dólares Americanos");                
                DataTable f3_ds = f.Get_Moneda_Por_Nombre("Euros");                

                //Tipo de Cambio
                dbo_Cat_TipoCambio g = new dbo_Cat_TipoCambio(RFC, Usuario);
                g.Insert_TipoCambio(Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()), 1.0f);
                g.Insert_TipoCambio(Int32.Parse(f2_ds.Rows[0]["Id_Moneda"].ToString()), 1.0f);
                g.Insert_TipoCambio(Int32.Parse(f3_ds.Rows[0]["Id_Moneda"].ToString()), 1.0f);

                //Clientes
                dbo_Cat_Cliente h = new dbo_Cat_Cliente(RFC, Usuario);
                h.Insert_Cliente(
                    0,
                    "Público en General",
                    "XAXX010101000",
                    "Público en General",
                    Int32.Parse(b_ds.Rows[0]["Id_GrupoClientes"].ToString()),
                    Int32.Parse(d_ds.Rows[0]["Id_Colaborador"].ToString()),
                    Int32.Parse(e_ds.Rows[0]["Id_Terminos_Pago"].ToString()),
                    Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()),
                    0,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    true
                    );

                h.Insert_Cliente(
                    1,
                    "Clientes Extranjeros",
                    "XEXX010101000",
                    "Clientes Extranjeros",
                    Int32.Parse(b_ds.Rows[0]["Id_GrupoClientes"].ToString()),
                    Int32.Parse(d_ds.Rows[0]["Id_Colaborador"].ToString()),
                    Int32.Parse(e_ds.Rows[0]["Id_Terminos_Pago"].ToString()),
                    Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()),
                    0,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "NA",
                    "00000",
                    9,
                    1,
                    "NA",
                    true
                    );

                //Serie
                dbo_Cat_Empresa_Serie i = new dbo_Cat_Empresa_Serie(RFC, Usuario);
                i.Insert_Empresa_Serie("A", null, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, true, true, true, true,
                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, true, true, true, true, DateTime.Now);
                DataTable i_ds = i.Get_Empresa_Serie_Por_Nombre("A");                

                //Sucursal
                dbo_Cat_Sucursal j = new dbo_Cat_Sucursal(RFC, Usuario);
                j.Insert_Sucursal("", "Matriz", Int32.Parse(i_ds.Rows[0]["Id_Serie"].ToString()), 9, 1);

                //Línea
                dbo_Cat_Linea k = new dbo_Cat_Linea(RFC, Usuario);
                k.Insert_Linea("Sin Línea", "000");
                DataTable k_ds = k.Get_Linea_Por_Nombre("Sin Línea");

                //Color
                dbo_Cat_Color l = new dbo_Cat_Color(RFC, Usuario);
                l.Insert_Color(Int32.Parse(k_ds.Rows[0]["Id_Linea"].ToString()), "Sin Color", "000");

                //Talla
                dbo_Cat_Talla m = new dbo_Cat_Talla(RFC, Usuario);
                m.Insert_Talla(Int32.Parse(k_ds.Rows[0]["Id_Linea"].ToString()), "Sin Talla", "000");

                //Cuenta Bancaria
                dbo_Cat_Cuenta_Bancaria n = new dbo_Cat_Cuenta_Bancaria(RFC, Usuario);
                n.Insert_Cuenta_Bancaria("Caja Chica", "Caja Chica", Int32.Parse(f_ds.Rows[0]["Id_Moneda"].ToString()));

                //Tipos de Actividad
                dbo_Cat_Tipo_Actividad o = new dbo_Cat_Tipo_Actividad(RFC, Usuario);
                o.Insert_Tipo_Actividad("Llamada");
                o.Insert_Tipo_Actividad("Cita");
                o.Insert_Tipo_Actividad("Envío de Mail");

                //Métodos de Pago
                dbo_Cat_Metodo_Pago p = new dbo_Cat_Metodo_Pago(RFC, Usuario);
                p.Insert_Metodo_Pago("Efectivo");
                p.Insert_Metodo_Pago("No Identificado");
                p.Insert_Metodo_Pago("Cheque Nominativo");
                p.Insert_Metodo_Pago("Tranferencia Electrónica");
                p.Insert_Metodo_Pago("Tarjeta de Debito, de Credito, de Servicios y/o Monedero Electronico");

                //Formas de Pago
                dbo_Cat_Forma_Pago q = new dbo_Cat_Forma_Pago(RFC, Usuario);
                q.Insert_Forma_Pago("Pago en parcialidades");
                q.Insert_Forma_Pago("Pago en una solo exhibición");

                //Unidades de Medida
                dbo_Cat_UM r = new dbo_Cat_UM(RFC, Usuario);
                r.Insert_UM("Pieza");
                r.Insert_UM("Caja");

                //Tipos de Movimiento de Inventario
                dbo_Cat_TipoMov_Inv s = new dbo_Cat_TipoMov_Inv(RFC, Usuario);
                s.Insert_TipoMov_Inv("Compras", "Entrada", "CO");
                s.Insert_TipoMov_Inv("Devoluciones a Proveedor", "Salida", "DP");
                s.Insert_TipoMov_Inv("Ventas", "Entrada", "VE");
                s.Insert_TipoMov_Inv("Devoluciones de Venta", "Entrada", "DV");
                s.Insert_TipoMov_Inv("Inventario Físico", "Entrada", "IF");
                s.Insert_TipoMov_Inv("Remisión", "Salida", "RE");
                s.Insert_TipoMov_Inv("Ticket de Venta", "Salida", "TV");

                //Tasas de Impuesto
                dbo_Cat_TasaImpuesto u = new dbo_Cat_TasaImpuesto(RFC, Usuario);
                u.Insert_TasaImpuesto("IVA Aplicable", "", 16, 0, 0);
                u.Insert_TasaImpuesto("Arrendamiento", "", 16, 10.667, 10);
                u.Insert_TasaImpuesto("Honorarios", "", 16, 10.667, 10);
                u.Insert_TasaImpuesto("Sin Impuesto", "", 0, 0, 0);
                u.Insert_TasaImpuesto("Excento", "", 0, 0, 0);                

                //Empresa
                dbo_Cat_Empresa v = new dbo_Cat_Empresa(RFC, Usuario);
                v.Insert_Empresa(Razon_Social, Nombre_Contacto, Puesto_Contacto, Telefono_Contacto, Correo_Contacto, true);

                //Empresa Datos Factura
                dbo_Cat_Empresa_Datos_Factura w = new dbo_Cat_Empresa_Datos_Factura(RFC, Usuario);
                w.Insert_Empresa_Datos_Factura(1, null, null, null, null, null, false, false, 0);

                //Usuario
                int Dia_F = DateTime.Now.Day;
                DateTime Fecha_F = new DateTime();

                if(Dia_F > 28)
                {
                    Dia_F = 2;
                    Fecha_F = new DateTime(DateTime.Now.AddMonths(2).Year, DateTime.Now.AddMonths(2).Month, 2, 23, 59, 59);
                }
                else
                {
                    int anio = 0;
                    int mes = 0;
                    int dia = 0;

                    anio = DateTime.Now.Year;
                    mes = DateTime.Now.Month;
                    dia = DateTime.Now.Day;

                    Fecha_F = new DateTime(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, DateTime.Now.Day, 23, 59, 59);                                        
                }                

                //Menus
                dbo_Sec_Menu y = new dbo_Sec_Menu();
                DataTable Menus = y.Get_Menus();

                for (int index = 0; index < Menus.Rows.Count; index++) {

                    dbo_Sec_MenuUser z = new dbo_Sec_MenuUser();
                    z.Insert_Sec_MenuUser(Int32.Parse( Menus.Rows[index]["IdMenu"].ToString()), RFC, ds_x, true);
                }

                dbo_Sec_Usuario_PV aa = new dbo_Sec_Usuario_PV();
                aa.Insert_Sec_Usuario_PV(ds_x, 3);

                return new Respuesta(1, "Exito");
            }
            catch (Exception)
            {
                return new Respuesta(2, "Error");
            }
        }
    }
}
